package com.darwin.darwinUI.controls
{
	import com.darwin.darwinUI.core.UIComponent;
	import com.darwin.darwinUI.general.DarwinFont;
	
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.TextEvent;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	
	/**
	 * 文本输入框
	 * @author Roland
	 */
	public class TextInput extends UIComponent
	{
		private var _textField:TextField;
		private var _font:DarwinFont;
		/**
		 *	实例化一个文本输入框 
		 * @param defaultText
		 * @param font
		 * 
		 */
		public function TextInput(defaultText:String = "",font:DarwinFont = null)
		{
			super();
			createTextField(defaultText);
			this.font = font;
		}
		
		private function createTextField(text:String):void
		{
			_textField = new TextField();
			_textField.type = TextFieldType.INPUT;
			_textField.multiline = true;
			_textField.wordWrap = true;
			_textField.text = text;
			_textField.selectable = true;
			_textField.border = true;
			_textField.addEventListener(TextEvent.TEXT_INPUT,onTextEvent);
			_textField.addEventListener(TextEvent.LINK,onTextEvent);
			_textField.addEventListener(Event.CHANGE,onTextEvent);
			addChild(_textField);
		}
		
		protected function onTextEvent(event:Event):void
		{
			dispatchEvent(event);
		}
		
		/**
		 * 将第一个字符和最后一个字符的索引值（使用 beginIndex 和 endIndex 参数指定）指定的文本设置为所选内容。如果两个参数值相同，则此方法会设置插入点，就如同设置 caretIndex 属性一样。 
		 * @param beginIndex 所选内容中第一个字符从零开始的索引值（例如，第一个字符的索引值是 0，第二个字符的索引值是 1，依此类推）。
		 * @param endIndex 所选内容中最后一个字符的从零开始的索引值。
		 * @see selectable 
		 * @see selectionBeginIndex 
		 * @see selectionEndIndex 
		 * @see caretIndex
		 */
		public function setSelection(beginIndex:int, endIndex:int):void
		{
			_textField.setSelection(beginIndex,endIndex);
		}

		/**
		 * 指示用户可输入到文本字段中的字符集。如果 restrict 属性的值为 null，则可以输入任何字符。
		 */
		public function get restrict():String
		{
			return _textField.restrict;
		}

		/**
		 * @private
		 */
		public function set restrict(value:String):void
		{
			_textField.restrict = value;
		}


		/**
		 * 指示文本字段是否自动换行 
		 */
		public function get wordWrap():Boolean
		{
			return _textField.wordWrap;
		}

		/**
		 * @private
		 */
		public function set wordWrap(value:Boolean):void
		{
			_textField.wordWrap = value;
		}

		
		/**
		 * 指示字段是否为多行文本字段
		 */
		public function get multiline():Boolean
		{
			return _textField.multiline;
		}

		/**
		 * @private
		 */
		public function set multiline(value:Boolean):void
		{
			_textField.multiline = value;
		}

		
		/**
		 * 包含文本字段内容的 HTML 表示形式 
		 */
		public function get htmlText():String
		{
			return _textField.htmlText;
		}

		/**
		 * @private
		 */
		public function set htmlText(value:String):void
		{
			_textField.htmlText = value;
		}

		
		/**
		 *	 文本输入框中当前的内容
		 * @return 
		 * 
		 */
		public function get text():String
		{
			return _textField.text;
		}
		
		/**
		 * @private
		 */
		public function set text(value:String):void
		{
			_textField.text = value;
		}

		override public function set width(value:Number):void
		{
			super.width = value;
			_textField.width = value;
		}
		
		override public function set height(value:Number):void
		{
			super.height = value;
			_textField.height = value;
		}
		

		/**
		 * 字体颜色 
		 */
		public function get textColor():uint
		{
			return _textField.textColor;
		}

		/**
		 * @private
		 */
		public function set textColor(value:uint):void
		{
			_textField.textColor = value;
		}

		
		/**
		 *	是否显示边框 
		 */
		public function get border():Boolean
		{
			return _textField.border;
		}

		/**
		 * @private
		 */
		public function set border(value:Boolean):void
		{
			_textField.border = value;
		}

		/**
		 *	边框颜色，只有当文本字段已将 border 属性设置为 true 时，才可以看到颜色
		 */
		public function get borderColor():uint
		{
			return _textField.borderColor;
		}

		/**
		 * @private
		 */
		public function set borderColor(value:uint):void
		{
			_textField.borderColor = value;
		}

		/**
		 *	是否使用单一颜色背景，false时使用由background和backgroundSkin定义的背景，true时则使用由backgroundColor定义的纯色作为背景
		 */
		public function get useBackgroundColor():Boolean
		{
			return _textField.background;
		}

		/**
		 * @private
		 */
		public function set useBackgroundColor(value:Boolean):void
		{
			_textField.background = value;
			if(value == true)
			{
				super.background = null;
			}
		}

		/**
		 *	背景颜色，仅当 useBackgroundColor 属性设置为true时有效
		 */
		public function get backgroundColor():uint
		{
			return _textField.backgroundColor;
		}

		/**
		 * @private
		 */
		public function set backgroundColor(value:uint):void
		{
			_textField.backgroundColor = value;
		}

		/**
		 *	文本的字体 
		 */
		public function get font():DarwinFont
		{
			return _font;
		}

		/**
		 * @private
		 */
		public function set font(value:DarwinFont):void
		{
			_font = value;
			if(_font)
			{
				_font.apply(_textField);
			}
		}

		/**
		 *	将舞台焦点设置为自身 
		 * @param stage
		 * 
		 */
		public function setFocus():void
		{
			if(this.stage)stage.focus = _textField;
		}

		/**
		 *	文本输入框内部的textField。若设置此属性,textField的一下参数会被强制设置：
		 * <li/>textField.type = TextFieldType.INPUT
		 * <li/>textField.selectable = true;
		 */
		public function get textField():TextField
		{
			return _textField;
		}

		/**
		 * @private
		 */
		public function set textField(value:TextField):void
		{
			if(_textField)
			{
				_textField.removeEventListener(TextEvent.TEXT_INPUT,onTextEvent);
				_textField.removeEventListener(TextEvent.LINK,onTextEvent);
				_textField.removeEventListener(Event.CHANGE,onTextEvent);
				removeChild(_textField);
				_textField = null;
			}
			_textField = value;
			_textField.type = TextFieldType.INPUT;
			_textField.selectable = true;
			_textField.addEventListener(TextEvent.TEXT_INPUT,onTextEvent);
			_textField.addEventListener(TextEvent.LINK,onTextEvent);
			_textField.addEventListener(Event.CHANGE,onTextEvent);
			addChild(_textField);
		}

		
	}
}